package a3;


import com.common.ByteBuf;
import com.common.Unpooled;
import com.common.ChannelHandlerContext;
import com.common.SimpleChannelInboundHandler;

import java.nio.charset.Charset;
import java.util.UUID;

public class MyServerHandler extends SimpleChannelInboundHandler<ByteBuf> {

    private int count;

    //服务端只有这一个处理器，接收到的数据一定是bytebuf。
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
    	//保存数据的buffer长度不能大于源数据msg的长度，这是netty决定的。
        byte[] buffer = new byte[msg.readableBytes()];//可读字节数
        msg.readBytes(buffer);
        //字节转string
        String message = new String(buffer, Charset.forName("utf-8"));

        System.out.println("服务端接收到的消息内容： " + message);
        //服务端收到的数据只有一条。
        //因为服务端只知道是字节流，buffer里面包含了客户端的10条消息，所以这里只有一条消息。粘包。所以netty的底层的框架，不像Structs2是 高层框架。
        System.out.println("服务端接收到的消息数量： " + (++this.count));

        ByteBuf responseByteBuf = Unpooled.copiedBuffer(UUID.randomUUID().toString(), Charset.forName("utf-8"));
        ctx.writeAndFlush(responseByteBuf);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
